DocumentDB এবং MongoDB উভয়ই Aggregation Pipelines এবং MapReduce সাপোর্ট করে, যা ডেটার উপর জটিল বিশ্লেষণ এবং ট্রান্সফর্মেশন সম্পাদন করতে ব্যবহৃত হয়। এই দুটি ফিচার ডেটা প্রসেসিংয়ের জন্য খুবই শক্তিশালী টুলস, তবে তাদের ব্যবহার ও পারফরম্যান্স ভিন্ন।
Aggregation Pipelines
Aggregation Pipelines হল MongoDB/DocumentDB-তে ডেটা প্রক্রিয়াকরণের একটি শক্তিশালী পদ্ধতি, যা একাধিক ধাপে ডেটা প্রক্রিয়া করতে সহায়ক। এটি একটি সিরিজ অব স্টেপ বা Stages দ্বারা গঠিত, যেখানে প্রতিটি স্টেজ একটি নির্দিষ্ট কাজ করে, যেমন ডেটা ফিল্টারিং, গ্রুপিং, সোর্টিং, বা প্রজেকশন।
Aggregation Pipeline-এর মূল উপাদান:
- Stages: প্রতিটি স্টেজে ডেটা একটি নির্দিষ্ট ভাবে পরিবর্তিত হয়।
- Operators: বিভিন্ন স্টেজে ডেটা পরিবর্তন বা প্রক্রিয়া করতে ব্যবহার করা হয়, যেমন
$match,$group,$sort,$project,$unwind, ইত্যাদি।
প্রধান স্টেজগুলির উদাহরণ:
$match: ডেটাকে নির্দিষ্ট শর্তে ফিল্টার করা।
{ $match: { age: { $gt: 30 } } }এই স্টেজটি শুধুমাত্র সেই ডকুমেন্টগুলোকে রাখবে যেখানে
age30 এর বেশি।$group: ডেটাকে গ্রুপ করা এবং অ্যাগ্রিগেট করা।
{ $group: { _id: "$category", total: { $sum: "$amount" } } }এটি
categoryঅনুযায়ী ডেটা গ্রুপ করে এবং প্রতিটি গ্রুপের মোট পরিমাণ গণনা করবে।$sort: ডেটাকে সোর্ট করা।
{ $sort: { total: -1 } }এটি
totalএর ভিত্তিতে ডেটাকে অবতরণীভাবে সাজাবে।$project: ডেটার কিছু ফিল্ড মুছে ফেলা বা নতুন ফিল্ড তৈরি করা।
{ $project: { name: 1, age: 1, _id: 0 } }এটি শুধুমাত্র
nameএবংageফিল্ড রাখবে এবং_idফিল্ড বাদ দেবে।$unwind: অ্যারে ভ্যালু এক্সপ্যান্ড করা।
{ $unwind: "$items" }যদি
itemsএকটি অ্যারে হয়, তবে এটি প্রতিটি আইটেমের জন্য একটি আলাদা ডকুমেন্ট তৈরি করবে।
Aggregation Pipeline ব্যবহার করা:
db.orders.aggregate([
{ $match: { status: "shipped" } },
{ $group: { _id: "$customer", totalAmount: { $sum: "$amount" } } },
{ $sort: { totalAmount: -1 } },
{ $limit: 5 }
])
এই উদাহরণে:
- প্রথমে শুধুমাত্র shipped স্ট্যাটাসের অর্ডারগুলি ফিল্টার করা হবে।
- তারপর গ্রুপিং করে, গ্রাহকের মোট পরিমাণ হিসাব করা হবে।
- পরিশেষে, ডেটাগুলি মোট পরিমাণ অনুযায়ী সজ্জিত এবং শীর্ষ ৫টি গ্রাহক দেখানো হবে।
MapReduce
MapReduce একটি ডেটা প্রসেসিং মডেল যা বড় ডেটাসেটের সাথে কাজ করার সময় প্যারালাল প্রক্রিয়াকরণ সম্পাদন করতে সাহায্য করে। MongoDB/DocumentDB-তে এটি map এবং reduce ধাপে বিভক্ত:
- Map: ইনপুট ডেটাকে প্রক্রিয়া করে এবং একটি মিডিয়েট ডেটা স্ট্রাকচার (কী-ভ্যালু পেয়ার) তৈরি করে।
- Reduce: মিডিয়েট ডেটাকে একত্রিত করে, যেমন, অ্যাগ্রিগেশন বা স্কোরিং করা।
MapReduce-এর ধাপ:
- map(): ইনপুট ডেটাকে প্রক্রিয়া করে, সাধারণত এটি কী-ভ্যালু পেয়ার রিটার্ন করে।
- reduce(): কী-ভ্যালু পেয়ারের উপর কম্বাইন বা অ্যাগ্রিগেট করার কাজ করে।
উদাহরণ:
ধরা যাক, আপনার কাছে অর্ডার তথ্য রয়েছে এবং আপনি প্রতিটি গ্রাহকের জন্য মোট পরিমাণ হিসাব করতে চান।
Map Function:
function() {
emit(this.customer, this.amount);
}
এখানে, প্রতিটি ডকুমেন্টের জন্য একটি কী-ভ্যালু পেয়ার তৈরি হচ্ছে, যেখানে customer কী এবং amount ভ্যালু।
Reduce Function:
function(key, values) {
return Array.sum(values);
}
এটি গ্রাহকের জন্য সমস্ত পরিমাণ যোগ করে মোট পরিমাণ বের করে।
MapReduce ব্যবহার:
db.orders.mapReduce(
function() { emit(this.customer, this.amount); },
function(key, values) { return Array.sum(values); },
{ out: "total_sales" }
)
এই MapReduce অপারেশনটি:
- প্রতিটি গ্রাহকের জন্য
amountএর মোট যোগফল বের করবে। - ফলাফল
total_salesনামক একটি নতুন কলে সংরক্ষণ করবে।
তুলনা: Aggregation Pipelines বনাম MapReduce
| ফিচার | Aggregation Pipelines | MapReduce |
|---|---|---|
| সহজতা | সহজ, একাধিক স্টেজ ব্যবহার করে ডেটা প্রক্রিয়া করা যায়। | জটিল, ম্যানুয়ালি দুটি আলাদা ফাংশন (map, reduce) লিখতে হয়। |
| পারফরম্যান্স | দ্রুত, বিশেষ করে যখন ডেটার পরিমাণ অনেক বেশি। | সাধারণত কমপার্ট পারফরম্যান্স, বিশেষ করে বড় ডেটাসেটে। |
| পুনঃব্যবহারযোগ্যতা | পুনঃব্যবহারযোগ্য, একাধিক স্টেজের মাধ্যমে কাস্টম লজিক প্রয়োগ করা যায়। | পুনঃব্যবহারযোগ্য নয়, পুনরায় লেখার প্রয়োজন হতে পারে। |
| ডেটা প্রক্রিয়া | একটি স্ট্রিমিং পদ্ধতিতে ধাপে ধাপে ডেটা প্রক্রিয়া করা হয়। | বড় ডেটাসেট একত্রিত করার জন্য ম্যাপ এবং রিডিউস ফাংশন ব্যবহার করে। |
সারাংশ
Aggregation Pipelines এবং MapReduce উভয়ই MongoDB এবং DocumentDB-তে জটিল ডেটা প্রক্রিয়াকরণের জন্য শক্তিশালী টুলস, তবে তাদের মধ্যে পারফরম্যান্স এবং ব্যবহারিক সুবিধার পার্থক্য রয়েছে। Aggregation Pipelines সাধারণত দ্রুত এবং সহজ, এবং এতে কম জটিলতা থাকে, যখন MapReduce বড় ডেটাসেটের সাথে প্যারালাল প্রক্রিয়াকরণ করতে ব্যবহৃত হয়, তবে এটি কিছুটা ধীর গতির হতে পারে এবং এটি সাধারণত কম প্রায়োগিক হয়।
Read more